home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus Special 25
/
AMIGAplus Sonderheft 25 (2000)(Falke)(DE)(Track 1 of 4)[!].iso
/
Updates
/
HD-Installer
/
jst_dev
/
sources
/
OSEmu
/
graphics.s
< prev
next >
Wrap
Text File
|
2000-04-12
|
21KB
|
1,032 lines
* $Id: graphics.s 1.1 1999/02/03 04:10:07 jotd Exp jotd $
**************************************************************************
* GRAPHICS LIBRARY
**************************************************************************
**************************************************************************
* INITIALIZATION
**************************************************************************
GFXINIT move.l _gfxbase,d0
beq .init
rts
.init move.l #1056,d0 ;-_LVOWriteChunkyPixels,d0
move.l #$220,d1
lea _gfxname,a0
bsr _InitLibrary
move.l d0,a0
move.l d0,_gfxbase
patch _LVOOwnBlitter(a0),MYRTS(PC)
patch _LVODisownBlitter(a0),MYRTS(PC)
patch _LVOInitView(a0),_InitView(PC)
patch _LVOInitVPort(a0),_InitVPort(PC)
patch _LVOFreeVPortCopLists(a0),_FreeVPortCopLists(PC)
patch _LVOInitBitMap(a0),_InitBitMap(PC)
patch _LVOInitRastPort(a0),_InitRastPort(PC)
patch _LVOMakeVPort(a0),_MakeVPort(PC)
patch _LVOMrgCop(a0),_MrgCop(PC)
patch _LVOCWait(a0),_CWait(PC) ; added by JOTD
patch _LVOCMove(a0),_CMove(PC) ; added by JOTD
patch _LVOCBump(a0),_CBump(PC) ; added by JOTD
patch _LVOLoadView(a0),_LoadView(PC)
patch _LVOLoadRGB4(a0),_LoadRGB4(PC)
patch _LVOSetRGB4(a0),_SetRGB4(PC)
patch _LVOFreeSprite(a0),_FreeSprite(PC)
patch _LVOGetSprite(a0),_GetSprite(PC)
patch _LVOChangeSprite(a0),_ChangeSprite(PC)
patch _LVOMoveSprite(a0),_MoveSprite(PC)
patch _LVOWaitBlit(a0),_WaitBlit(PC)
patch _LVOBltBitMap(a0),_BltBitMap(PC)
patch _LVOVBeamPos(a0),_VBeamPos(PC)
patch _LVODraw(a0),MYRTS(PC)
patch _LVOMove(a0),_SETMOVE(PC)
patch _LVOSetAPen(a0),_SETAPEN(PC)
patch _LVOSetBPen(a0),_SETBPEN(PC)
patch _LVOSetDrMd(a0),_SETDRAWMODE(PC)
patch _LVOWaitTOF(a0),_WaitTOF(PC)
;; patch _LVOWaitBOVP(a0),_WaitBOVP(PC) ; -- added by JOTD
patch _LVORectFill(a0),_RectFill(PC) ; -- added by JOTD
patch _LVOSetRast(a0),_SetRast(PC) ; -- added by JOTD
patch _LVOInitTmpRas(a0),_InitTmpRas(PC) ; -- added by JOTD
patch _LVOInitArea(a0),_InitArea(PC) ; -- added by JOTD
patch _LVOReadPixel(a0),_ReadPixel(PC)
patch _LVOWritePixel(a0),_WritePixel(PC)
patch _LVOBltTemplate(a0),_BltTemplate(PC)
patch _LVOAllocRaster(A0),_ALLOCRASTER(PC)
patch _LVOFreeRaster(A0),_FREERASTER(PC)
patch _LVOBltClear(A0),_BLTCLEAR(PC)
patch _LVOGetColorMap(A0),_GETCOLORMAP(PC)
patch _LVOFreeColorMap(A0),_FREECOLORMAP(PC)
;; patch _LVOUCopperListInit(a0),_UCOPPERLISTINIT(PC) ; -- added by JOTD
patch _LVOOpenFont(A0),_OPENFONT(PC)
patch _LVOSetFont(A0),_SETFONT(PC)
patch _LVOText(A0),_PRINTTEXT(PC)
MOVE.L #MYVIEW,gb_ActiView(A0)
lea STDCOPPER(PC),a1
MOVE.L a1,(gb_LOFlist,A0)
MOVE.L a1,(gb_SHFlist,A0)
MOVE.L a1,(_custom+cop2lc)
lea CPJMP2,a1
move.l a1,(gb_copinit,a0)
MOVE.L a1,(_custom+cop1lc)
lea.l _TOPAZ8FONT(PC),a1 ; added by Harry
move.l a1,(gb_DefaultFont,a0) ; added by Harry
moveq #4,d0 ;pal
cmp.l #PAL_MONITOR_ID,_monitor
beq .1
moveq #1,d0 ;ntsc
.1 MOVE.W d0,(gb_DisplayFlags,A0)
clr.b (gb_SpriteReserved,a0)
clr.l -(a7) ;TAG_DONE
pea RESTORECOPPER2(pc)
move.l #WHDLTAG_CBSWITCH_SET,-(a7)
move.l a7,a0
move.l _RESLOAD(pc),a1
jsr (resload_Control,a1)
lea (12,a7),a7 ;restore sp
tst.w (_custom+copjmp1)
move.w #DMAF_SETCLR!DMAF_MASTER!DMAF_COPPER!DMAF_BLITTER,(_custom+dmacon)
rts
RESTORECOPPER2 move.l a1,.save
move.l _gfxbase,a1
move.l (gb_LOFlist,a1),(_custom+cop2lc)
move.l .save,a1
jmp (A0)
CNOP 0,4
.save dc.l 0
CPJMP2 dc.l $0201fffe ;wait 0,2
DC.L $008A0000
STDCOPPER DC.L $FFFFFFFE
MYVIEW
DC.L _INITVIEWPORT
DC.L STDCOPPER
DC.L STDCOPPER
DC.W 0
DC.W 0
DC.W 0
_INITVIEWPORT
DC.L $EEEEEEEE
DC.L $EEEEEEEE
DC.L $EEEEEEEE
DC.L $EEEEEEEE
DC.L $EEEEEEEE
DC.L 0
DC.W 0
DC.W 0
DC.W 0
DC.W 0
DC.W 0
DC.B 0,0
DC.L _INITRASINFO
_INITRASINFO
DC.L 0
DC.L $EEEEEEEE
DC.W 0
DC.W 0
_FONTTABLE
DC.L _TOPAZNAME,_TOPAZ8FONT
DC.L 0
_TOPAZNAME
DC.B 'topaz.font',0
EVEN
_TOPAZ8FONT
DC.L 0,0,0,0,0 ;EMPTY MESSAGEPORT
DC.W 8 ;YSIZE
DC.B 0 ;NO SPECIAL STYLE
DC.B $41 ;FONTFLAGS:DESIGNED,ROMFONT
DC.W 8 ;XSIZE
DC.W 6 ;BASELINE
DC.W 1 ;FETT: 1 PIXEL VERSETZT
DC.W 1 ;1 TASK BENUTZT FONT (DUMMY)
DC.B $20 ;LOWEST CHAR IS SPACE
DC.B $FF ;HIGHEST CHAR IS "y
DC.L _TOPAZ8DATA ;FONTIMAGES
DC.W $C0 ;MODULO
DC.L _TOPAZ8OFFSETS ;OFFSETTABLES
DC.L 0 ;NON PROPORTIONAL FONT
DC.L 0 ;NO KERNING
_TOPAZ8DATA
INCBIN REPLFONT_DATA
_TOPAZ8OFFSETS
INCBIN REPLFONT_BITS
**************************************************************************
* GRAPHICS LIBRARY FUNCTIONS
**************************************************************************
_UCOPPERLISTINIT:
cmp.l #0,a0
bne.b .nz
moveq.l #0,D0
bra.b .exit ; error, returns NULL
.nz
; ok, we can continue
mulu #3,D0 ; n*4*3 bytes to initialize
subq.l #1,D0
.loop
move.l a0,D0
.exit:
rts
_FreeVPortCopLists:
move.l A2,-(A7)
move.l A0,A2
move.l #200,D1
move.l (vp_DspIns,a2),A1
move.l (4),A6
jsr (_LVOFreeMem,A6)
clr.l (vp_DspIns,a2)
; nothing allocated for the 3 of them below
clr.l (vp_SprIns,a2)
clr.l (vp_ClrIns,a2)
clr.l (vp_UCopIns,a2)
move.l (a7)+,A2
rts
_InitTmpRas:
move.l A1,(A0)
move.l D0,4(A0)
move.l A0,D0
rts
_InitArea:
MOVE.L A1,4(A0)
MOVE.L A1,(A0)
MOVE D0,18(A0)
ASL.L #2,D0
ADDA D0,A1
MOVE.L A1,12(A0)
MOVE.L A1,8(A0)
CLR 16(A0)
RTS
_InitView
movem.l D0/A0,-(A7)
move.w #$8,D0
.zero
clr.w (A0)+
dbf D0,.zero
movem.l (A7)+,D0/A0
rts
_InitVPort
movem.l D0/A0,-(A7)
move.w #9,D0
.zero
clr.l (A0)+
dbf D0,.zero
movem.l (A7)+,D0/A0
rts
_InitRastPort
MOVE.L #$EEEEEEEE,(A1)
MOVE.L #0,rp_BitMap(A1)
MOVE.L #$EEEEEEEE,rp_AreaPtrn(A1)
MOVE.L #$EEEEEEEE,rp_TmpRas(A1)
MOVE.L #$EEEEEEEE,rp_AreaInfo(A1)
MOVE.L #0,rp_GelsInfo(A1)
MOVE.L #$FF0000FF,rp_Mask(A1)
MOVE.L #$01000000,rp_DrawMode(A1)
CLR.L rp_Flags(A1)
CLR.L rp_cp_x(A1)
CLR.L rp_minterms(A1)
CLR.L rp_minterms+4(A1)
CLR.L rp_PenWidth(A1)
MOVE.L #_TOPAZ8FONT,rp_Font(A1)
CLR.W rp_AlgoStyle(A1)
MOVE.L #$00080008,rp_TxHeight(A1)
MOVE.L #$00060008,rp_TxBaseline(A1)
CLR.L rp_RP_User(A1)
RTS
_SETAPEN
MOVE.B D0,rp_FgPen(A1)
RTS
_SETBPEN
MOVE.B D0,rp_BgPen(A1)
RTS
_SETDRAWMODE
MOVE.B D0,rp_DrawMode(A1)
RTS
_SETMOVE
MOVE.W D0,rp_cp_x(A1)
MOVE.W D1,rp_cp_y(A1)
RTS
_BLTCLEAR AND.W #2,D1
BNE.S .FAIL
LSR.W #1,D0
SUBQ.W #1,D0
.1 CLR.W (A1)+
DBF D0,.1
RTS
.FAIL pea _LVOBltClear
pea _gfxname
bra _emufail
_ALLOCRASTER
ADD.W #$F,D0
LSR.W #3,D0
AND.W #$FFFE,D0
MULU D1,D0
MOVEQ.L #MEMF_CHIP!MEMF_PUBLIC,D1
BSR.W ALLOCM
RTS
_FREERASTER
ADD.W #$F,D0
LSR.W #3,D0
AND.W #$FFFE,D0
MULU D1,D0
MOVE.L A0,A1
BSR.W FREEM
RTS
_GETCOLORMAP
MOVE.L D0,-(A7)
ADD.L D0,D0
ADDQ.L #8,D0
MOVE.L #MEMF_CLEAR,D1
BSR.W ALLOCM
TST.L D0
BEQ.S .FAIL
MOVE.L D0,A0
MOVE.L (A7)+,D1
MOVE.W D1,cm_Count(A0)
LEA.L 8(A0),A1
MOVE.L A1,cm_ColorTable(A0)
CMP.W #$20,D1
BLS.S .1
MOVEQ.L #$20,D1
.1 LEA.L .COLORTAB(PC),A0
.2 MOVE.W (A0)+,(A1)+
SUBQ.W #1,D1
BNE.S .2
.FAIL RTS
.COLORTAB
DC.B $00,$00,$0F,$00,$00,$F0,$0F,$F0
DC.B $00,$0F,$0F,$0F,$00,$FF,$0F,$FF
DC.B $06,$20,$0E,$50,$09,$F1,$0E,$B0
DC.B $05,$5F,$09,$2F,$00,$F8,$0C,$CC
DC.B $00,$00,$01,$11,$02,$22,$03,$33
DC.B $04,$44,$05,$55,$06,$66,$07,$77
DC.B $08,$88,$09,$99,$0A,$AA,$0B,$BB
DC.B $0C,$CC,$0D,$DD,$0E,$EE,$0F,$FF
_FREECOLORMAP ;A0-*COLORMAP
MOVE.L (A2),-(A7)
MOVE.L A0,A2
MOVE.L cm_ColorTable(A2),A1
MOVEQ.L #0,D0
MOVE.W cm_Count(A2),D0
ADD.L D0,D0
ADDQ.L #7,D0
AND.L #$FFFFFFF8,D0
BSR.W FREEM
MOVE.L A2,A1
MOVEQ.L #8,D0
BSR.W FREEM
MOVE.L (A7)+,A2
RTS
_OPENFONT
move.l a2,-(a7)
; CMP.W #8,4(A0)
; BNE.S .ERR
MOVE.L (A0),A1
lea _FONTTABLE(PC),a2
.next move.l (a2)+,a0
move.l a0,d0
beq .ERR
bsr _strcmp
beq .found
addq.l #4,a2
bra .next
.found MOVE.L (A2),D0
move.l (a7)+,a2
rts
.ERR pea _LVOOpenFont
pea _gfxname
bra _emufail
_SETFONT MOVE.L A0,rp_Font(A1)
CLR.W rp_AlgoStyle(A1)
MOVE.W tf_YSize(A0),rp_TxHeight(A1)
MOVE.W tf_XSize(A0),rp_TxWidth(A1)
MOVE.W tf_Baseline(A0),rp_TxBaseline(A1)
MOVE.W tf_XSize(A0),rp_TxSpacing(A1)
RTS
_PRINTTEXT ;A0-*STRING, A1-*RASTPORT, D0-CHARCOUNT
MO